'''
basic - 29 高精度加法

问题描述
　　输入两个整数a和b，输出这两个整数的和。a和b都不超过100位。
算法描述
　　由于a和b都比较大，所以不能直接使用语言中的标准数据类型来存储。对于这种问题，一般使用数组来处理。
　　定义一个数组A，A[0]用于存储a的个位，A[1]用于存储a的十位，依此类推。同样可以用一个数组B来存储b。
　　计算c = a + b的时候，首先将A[0]与B[0]相加，如果有进位产生，则把进位（即和的十位数）存入r，
    把和的个位数存入C[0]，即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加，
    这时还应将低位进上来的值r也加起来，即C[1]应该是A[1]、B[1]和r三个数的和．
    如果又有进位产生，则仍可将新的进位存入到r中，和的个位存到C[1]中。依此类推，即可求出C的所有位。
　　最后将C输出即可。
输入格式
　　输入包括两行，第一行为一个非负整数a，第二行为一个非负整数b。两个整数都不超过100位，两数的最高位都不是0。
输出格式
　　输出一行，表示a + b的值。
样例输入
20100122201001221234567890
2010012220100122
样例输出
20100122203011233454668012
'''

"""
Author: CharlesWYQ Time: 2021/3/4 0:43
Name: BASIC-29 VIP试题 高精度加法

num1 = int(input())
num2 = int(input())
print(num1+num2)
"""



'''
# 直接在输入的时候就将数据转化为列表。就像这样A = list（input）

# 要求两个数的每一位相加，就像笔算一样，所以就需要遍历两个数组的每一位数，
# 如果采用两个for的形式的话，会出现很多重复的情况，而且时间复杂度也为Tn=O(n*n)。
# 自然是很麻烦的，所以就需要用到python的内置函数zip（），这样就可以直接同时遍历两个数组。
# 然后再根据算法描述的做法，将加得的数十位个位分别存储。
#
# 写好以上步骤后会发现zip（）函数只会遍历到其中最短的一个数组结束后就停止了。
# 也就是说只有两个数字相同位数时才可行。
# 这时就需要在遍历前对两个数组处理一下，将短的数组用0来填充至一样长。
# 这样就可以在不改变原数大小的情况下使zip（）函数能遍历完整了。


A = list(input())
B = list(input())
l = abs(len(A)-len(B))

for i in range(l):
    if len(A)>len(B):
        B.insert(0,0)
    else:
        A.insert(0,0)

C = []
r = 0

for x, y in zip(A[::-1],B[::-1]):
    ss = int(x)+int(y)+r
    if ss >= 10:
        r = ss//10
    else:
        r = 0
    C.insert(0, str(ss % 10))
C.insert(0, str(r))

print(int(''.join(C)))
'''







# # 从标准输入中分别读取两个字符串并去除首尾的空格，将它们分别赋值给变量 a 和 b。
# a = input().strip()
# b = input().strip()
#
# # 将字符串转化为数组
# # 将字符串 a和b 反转后，使用列表推导式将每个字符转化为整数，并存储在数组 A 和 B 中。
# # 这样，A 和 B 中的每个元素就分别存储了 a 和 b 的每一位数字。
# A = [int(x) for x in a[::-1]]
# B = [int(x) for x in b[::-1]]
#
# # 计算结果
# # 定义一个空数组 C 用来存储计算结果，定义一个变量 r 用来记录进位。
# C = []
# r = 0
#
# # 遍历 A 和 B 中较长的数组，从低位到高位进行相加。
# for i in range(max(len(A), len(B))):
#     # 如果当前位 i 在 A 和 B 的范围内，将 A[i] 和 B[i] 相加并加上进位 r。
#     if i < len(A):
#         r += A[i]
#     if i < len(B):
#         r += B[i]
#
#     # C.append(r % 10) 和 r //= 10：将相加的结果的个位数存储在 C 中，将进位存储在 r 中。
#     C.append(r % 10)
#     r //= 10  # r为进位
#
# # 如果还有进位，则将进位加到结果的最高位
# if r > 0:
#     C.append(r)
#
# # 将结果转化为字符串并反转
# #将数组 C 转化为字符串，并反转字符串的顺序。
# result = ''.join(str(x) for x in C[::-1])
#
# print(result)
#
# # 总的来说，这段代码通过将两个大整数转化为数组，并从低位到高位进行相加的方式，
# # 实现了两个大整数的相加功能，并输出结果。

a = input()
b = input()
A = [int(i) for i in a[::-1]]
B = [int(i) for i in b[::-1]]

C = []
r = 0
for i in range(max(len(A), len(B))):
    if i < len(A):
        r += A[i]
    if i < len(B):
        r += B[i]

    C.append(r % 10)
    r //= 10

if r > 0:
    C.append(r)

result = ''.join(str(i) for i in C[::-1])
print(result)




